"""
题目17：输入一行字符，分别统计出其中英文字母、空格、数字和其它字符的个数。
"""
'''
# 这个里面用的是系统方法判断的，不是常规的那种

from collections import defaultdict
from collections import Counter
s = "111   222   333   444   qqq"
letters = 0
space = 0
digit = 0
others = 0

for i in s:
    # 判断是否为字母
    if i.isalpha():
        letters += 1
        # 判断是够为空格
    elif i.isspace():
        space += 1
        # 判断是够为数字
    elif i.isdigit():
        digit += 1
    else:
        others += 1

print('char = %d,space = %d,digit = %d,others = %d' %
      (letters, space, digit, others))

# 工业版
char_types = defaultdict(lambda: defaultdict(int))
for char in s:
    if char.isalpha():
        char_types['letters'][char] += 1
    elif char.isdigit():
        char_types['digits'][char] += 1
    elif char.isspace():
        char_types['isspace'][char] += 1
    else:
        char_types['others'][char] += 1
print(char_types)

# 自己写就是通用的（但是垃圾，效率低）
# s = "111   222   333   444   qqq"
contents = {}
for i in s:
    # 这样效率不高，直接用contents就行
    # if i in contents.keys():
    if i in contents:
        contents[i] += 1
    else:
        contents[i] = 1
# print(contents)


# 工业方法1，效率版本
char_counter = Counter(s)
# print(char_counter)
# print(dict(char_counter))

# 工业方法2，效率版本
char_dict = {}

for char in s:
    # 如果char在字典中：返回当前计数值
    # 如果char不在字典中：返回默认值0
    char_dict[char] = char_dict.get(char, 0) + 1

# print(char_dict)
'''

"""
题目18：求s=a+aa+aaa+aaaa+aa...a的值，其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加)，几个数相加由键盘控制。
"""
"""
# 第一种，AI生成的
# 获取用户输入
a = int(input("请输入数字a："))
n = int(input("请输入相加的项数n："))

# 初始化当前项和总和
current_term = 0
total_sum = 0

# 循环计算每一项并显示
print(f"当a={a}且相加{n}项时，各项数值为：")
for i in range(n):
    current_term = current_term * 10 + a  # 生成当前项（如2, 22, 222...）
    print(f"第{i+1}项：{current_term}")
    total_sum += current_term  # 累加到总和

# 输出结果
print(f"\n总和结果为：{total_sum}")
"""


def timu18_1():

    # 自己写的
    n = int(input("位数："))
    a = int(input("数值："))
    num_list = []
    d = 0
    for i in range(n):
        # 就是第一次之后 11*10=110，110 +1 = 111
        d = d*10+a
        print(d)
        num_list.append(d)

    print(sum(num_list))


# timu18_1()


def timu18_2():

    # 自己写的
    n = int(input("位数："))
    a = int(input("数值："))
    final = 0
    final_sum = 0

    for i in range(n):
        final = final*10 + a
        final_sum += final

    print(final_sum)


# timu18_2()

"""
题目19：一个数如果恰好等于它的因子之和，这个数就称为"完数"。例如6=1＋2＋3.编程找出1000以内的所有完数。
"""


def timu19(num=1000):

    for i in range(1, num+1):
        yinzi = []
        for j in range(1, int(i**0.5)+1):
            if i % j == 0:
                yinzi.append(j)
                # 这一步一定要排除自身，不然像6，就会变成 1+2+3+6 = 12
                if j != i//j and i//j < i:
                    yinzi.append(i//j)
        total = sum(yinzi)
        if total == i and len(yinzi) > 1:
            print(i)


timu19()
